#!/usr/bin/env node

/**
 * 开发环境设置脚本
 * 自动配置开发环境
 */

const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');

console.log('🛠️  设置开发环境...\n');

// 1. 检查 Node.js 版本
console.log('🔍 检查 Node.js 版本...');
const nodeVersion = process.version;
const majorVersion = parseInt(nodeVersion.slice(1).split('.')[0]);

if (majorVersion < 16) {
  console.log('❌ Node.js 版本过低，请升级到 16.0.0 或更高版本');
  process.exit(1);
} else {
  console.log(`✅ Node.js 版本: ${nodeVersion}`);
}

// 2. 安装依赖
console.log('\n📦 安装依赖...');
try {
  execSync('npm install', { stdio: 'inherit' });
  console.log('✅ 依赖安装完成');
} catch (error) {
  console.log('❌ 依赖安装失败');
  process.exit(1);
}

// 3. 安装开发工具
console.log('\n🔧 安装开发工具...');
const devDeps = [
  '@typescript-eslint/eslint-plugin',
  '@typescript-eslint/parser',
  '@vue/eslint-config-typescript',
  'prettier',
  'eslint-plugin-vue',
];

try {
  execSync(`npm install --save-dev ${devDeps.join(' ')}`, { stdio: 'inherit' });
  console.log('✅ 开发工具安装完成');
} catch (error) {
  console.log('⚠️  开发工具安装失败，请手动安装');
}

// 4. 设置 Git hooks
console.log('\n🔗 设置 Git hooks...');
const hooksDir = path.join(__dirname, '../.git/hooks');
if (fs.existsSync(hooksDir)) {
  const preCommitHook = `#!/bin/sh
# 代码提交前检查
echo "🔍 运行代码检查..."

# 运行 ESLint
npm run lint
if [ $? -ne 0 ]; then
  echo "❌ ESLint 检查失败"
  exit 1
fi

# 运行 Prettier
npm run format:check
if [ $? -ne 0 ]; then
  echo "❌ 代码格式检查失败，运行 npm run format 修复"
  exit 1
fi

echo "✅ 代码检查通过"
`;

  fs.writeFileSync(path.join(hooksDir, 'pre-commit'), preCommitHook);
  
  try {
    execSync(`chmod +x ${path.join(hooksDir, 'pre-commit')}`);
    console.log('✅ Git hooks 设置完成');
  } catch (error) {
    console.log('⚠️  Git hooks 权限设置失败');
  }
} else {
  console.log('⚠️  未找到 Git 仓库，跳过 hooks 设置');
}

// 5. 创建 VS Code 配置
console.log('\n⚙️  创建 VS Code 配置...');
const vscodeDir = path.join(__dirname, '../.vscode');
if (!fs.existsSync(vscodeDir)) {
  fs.mkdirSync(vscodeDir);
}

const settings = {
  'editor.formatOnSave': true,
  'editor.codeActionsOnSave': {
    'source.fixAll.eslint': true,
  },
  'eslint.validate': [
    'javascript',
    'typescript',
    'vue',
  ],
  'typescript.preferences.importModuleSpecifier': 'relative',
  'vue.codeActions.enabled': true,
  'files.associations': {
    '*.vue': 'vue',
  },
};

fs.writeFileSync(
  path.join(vscodeDir, 'settings.json'),
  JSON.stringify(settings, null, 2),
);

const launch = {
  'version': '0.2.0',
  'configurations': [
    {
      'name': 'Debug Electron Main',
      'type': 'node',
      'request': 'launch',
      'cwd': '${workspaceFolder}',
      'runtimeExecutable': '${workspaceFolder}/node_modules/.bin/electron',
      'windows': {
        'runtimeExecutable': '${workspaceFolder}/node_modules/.bin/electron.cmd',
      },
      'args': ['.'],
      'outputCapture': 'std',
    },
  ],
};

fs.writeFileSync(
  path.join(vscodeDir, 'launch.json'),
  JSON.stringify(launch, null, 2),
);

console.log('✅ VS Code 配置创建完成');

// 6. 更新 package.json 脚本
console.log('\n📝 更新 package.json 脚本...');
const packageJsonPath = path.join(__dirname, '../package.json');
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));

const newScripts = {
  ...packageJson.scripts,
  'lint': 'eslint src --ext .ts,.vue,.js',
  'lint:fix': 'eslint src --ext .ts,.vue,.js --fix',
  'format': 'prettier --write "src/**/*.{ts,vue,js,json,md}"',
  'format:check': 'prettier --check "src/**/*.{ts,vue,js,json,md}"',
  'type-check': 'vue-tsc --noEmit',
  'security:check': 'node scripts/fix-security.js',
  'perf:analyze': 'node scripts/optimize-performance.js',
  'dev:setup': 'node scripts/setup-dev.js',
};

packageJson.scripts = newScripts;

fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
console.log('✅ package.json 脚本更新完成');

// 7. 运行初始检查
console.log('\n🔍 运行初始检查...');
try {
  execSync('npm run type-check', { stdio: 'inherit' });
  console.log('✅ TypeScript 检查通过');
} catch (error) {
  console.log('⚠️  TypeScript 检查发现问题，请查看上方输出');
}

// 8. 生成开发指南
const devGuide = `# ReadCat 开发指南

## 🚀 快速开始

### 环境要求
- Node.js >= 16.0.0
- npm >= 7.0.0

### 安装依赖
\`\`\`bash
npm install
\`\`\`

### 开发命令
\`\`\`bash
# 启动开发服务器
npm run dev

# 构建项目
npm run build

# 代码检查
npm run lint

# 代码格式化
npm run format

# 类型检查
npm run type-check

# 安全检查
npm run security:check

# 性能分析
npm run perf:analyze
\`\`\`

## 📁 项目结构

\`\`\`
src/
├── components/     # Vue 组件
├── views/         # 页面组件
├── store/         # 状态管理
├── router/        # 路由配置
├── utils/         # 工具函数
├── core/          # 核心功能
├── types/         # 类型定义
└── assets/        # 静态资源
\`\`\`

## 🔧 开发规范

### 代码风格
- 使用 ESLint + Prettier 进行代码格式化
- 遵循 Vue 3 + TypeScript 最佳实践
- 使用严格的 TypeScript 类型检查

### 提交规范
- 提交前会自动运行代码检查
- 使用语义化提交信息
- 确保所有测试通过

### 安全规范
- 禁止使用 \`any\` 类型
- 使用统一的错误处理
- 遵循输入验证规范

## 🛠️ 工具配置

### VS Code 扩展推荐
- Vue Language Features (Volar)
- TypeScript Vue Plugin (Volar)
- ESLint
- Prettier

### 调试配置
- 已配置 Electron 主进程调试
- 支持 Vue DevTools
- 集成 TypeScript 调试

## 📚 参考资料
- [Vue 3 文档](https://vuejs.org/)
- [TypeScript 文档](https://www.typescriptlang.org/)
- [Electron 文档](https://www.electronjs.org/)
`;

fs.writeFileSync(path.join(__dirname, '../DEV_GUIDE.md'), devGuide);
console.log('✅ 开发指南创建完成');

console.log('\n🎉 开发环境设置完成！');
console.log('\n📖 下一步:');
console.log('   1. 运行 npm run dev 启动开发服务器');
console.log('   2. 阅读 DEV_GUIDE.md 了解开发规范');
console.log('   3. 运行 npm run security:check 检查安全问题');
console.log('   4. 运行 npm run perf:analyze 分析性能');